In [ ]:
#%pip install torch torchvision torchaudio
#%pip install ultralytics
In [ ]:
import imageio
import cv2
from ultralytics import YOLO
import matplotlib.pyplot as plt
# Step 1: Extract frames from the GIF
gif_path = 'snail_tracking_full_fast.gif'
frames = imageio.mimread(gif_path)
# Load the YOLO model
model = YOLO('yolov8n.pt') # Load your trained YOLO model, or use a pre-trained one
# Step 2: Run object detection on each frame
detected_frames = []
for i, frame in enumerate(frames):
# Convert the frame to OpenCV format (BGR)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# Perform object detection
results = model.predict(frame)
# Annotate the frame with detected objects
annotated_frame = results[0].plot()
# Convert back to RGB for imageio
annotated_frame_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
detected_frames.append(annotated_frame_rgb)
print(f"Processed frame {i+1}/{len(frames)}")
# Step 3: Save the annotated frames as a new GIF
output_gif_path = 'snail_detection_output.gif'
imageio.mimsave(output_gif_path, detected_frames, duration=1)
print(f"Saved output GIF to {output_gif_path}")
# Step 4: Display one of the detected frames
plt.imshow(detected_frames[0])
plt.axis('off')
plt.show()
Downloading https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n.pt to 'yolov8n.pt'...
100%|██████████| 6.25M/6.25M [00:00<00:00, 23.0MB/s]
0: 384x640 1 bowl, 55.2ms Speed: 2.9ms preprocess, 55.2ms inference, 9.7ms postprocess per image at shape (1, 3, 384, 640) Processed frame 1/20 0: 384x640 1 cup, 1 bowl, 42.8ms Speed: 3.0ms preprocess, 42.8ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 2/20 0: 384x640 1 bowl, 53.2ms Speed: 1.6ms preprocess, 53.2ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 3/20 0: 384x640 1 cup, 1 bowl, 80.4ms Speed: 2.7ms preprocess, 80.4ms inference, 0.8ms postprocess per image at shape (1, 3, 384, 640) Processed frame 4/20 0: 384x640 1 bowl, 62.6ms Speed: 1.7ms preprocess, 62.6ms inference, 4.2ms postprocess per image at shape (1, 3, 384, 640) Processed frame 5/20 0: 384x640 1 bowl, 79.3ms Speed: 2.2ms preprocess, 79.3ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 6/20 0: 384x640 1 bowl, 36.1ms Speed: 1.7ms preprocess, 36.1ms inference, 4.9ms postprocess per image at shape (1, 3, 384, 640) Processed frame 7/20 0: 384x640 1 bowl, 58.6ms Speed: 2.5ms preprocess, 58.6ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 8/20 0: 384x640 1 bowl, 38.5ms Speed: 2.1ms preprocess, 38.5ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 9/20 0: 384x640 1 cup, 1 bowl, 61.8ms Speed: 1.7ms preprocess, 61.8ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 10/20 0: 384x640 1 bowl, 67.9ms Speed: 1.7ms preprocess, 67.9ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 11/20 0: 384x640 1 bowl, 38.0ms Speed: 2.2ms preprocess, 38.0ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 12/20 0: 384x640 1 bowl, 34.8ms Speed: 1.6ms preprocess, 34.8ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 13/20 0: 384x640 1 bowl, 36.2ms Speed: 1.8ms preprocess, 36.2ms inference, 0.9ms postprocess per image at shape (1, 3, 384, 640) Processed frame 14/20 0: 384x640 1 bowl, 34.4ms Speed: 1.4ms preprocess, 34.4ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 15/20 0: 384x640 1 bowl, 39.9ms Speed: 1.4ms preprocess, 39.9ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 16/20 0: 384x640 1 bowl, 43.8ms Speed: 1.4ms preprocess, 43.8ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 17/20 0: 384x640 1 bowl, 38.1ms Speed: 2.7ms preprocess, 38.1ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 18/20 0: 384x640 1 bowl, 41.3ms Speed: 2.0ms preprocess, 41.3ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 19/20 0: 384x640 1 bowl, 31.0ms Speed: 1.4ms preprocess, 31.0ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 20/20 Saved output GIF to snail_detection_output.gif
In [ ]:
import imageio
import os
# Load the GIF
gif_path = 'snail_tracking_full_fast.gif'
frames = imageio.mimread(gif_path)
# Create a directory to save extracted frames
output_dir = 'extracted_frames'
os.makedirs(output_dir, exist_ok=True)
# Save each frame as a separate image
for i, frame in enumerate(frames):
output_path = os.path.join(output_dir, f'frame_{i+1:02d}.png')
imageio.imwrite(output_path, frame)
print(f"Saved {output_path}")
print("All frames have been extracted and saved.")
Saved extracted_frames/frame_01.png Saved extracted_frames/frame_02.png Saved extracted_frames/frame_03.png Saved extracted_frames/frame_04.png Saved extracted_frames/frame_05.png Saved extracted_frames/frame_06.png Saved extracted_frames/frame_07.png Saved extracted_frames/frame_08.png Saved extracted_frames/frame_09.png Saved extracted_frames/frame_10.png Saved extracted_frames/frame_11.png Saved extracted_frames/frame_12.png Saved extracted_frames/frame_13.png Saved extracted_frames/frame_14.png Saved extracted_frames/frame_15.png Saved extracted_frames/frame_16.png Saved extracted_frames/frame_17.png Saved extracted_frames/frame_18.png Saved extracted_frames/frame_19.png Saved extracted_frames/frame_20.png All frames have been extracted and saved.
In [ ]:
In [ ]:
In [ ]:
import os
import shutil
from sklearn.model_selection import train_test_split
# Define paths
base_path = 'snail-data'
images_path = os.path.join(base_path, 'images')
labels_path = os.path.join(base_path, 'labels')
train_images_path = os.path.join(base_path, 'train/images')
val_images_path = os.path.join(base_path, 'val/images')
train_labels_path = os.path.join(base_path, 'train/labels')
val_labels_path = os.path.join(base_path, 'val/labels')
# Create directories
os.makedirs(train_images_path, exist_ok=True)
os.makedirs(val_images_path, exist_ok=True)
os.makedirs(train_labels_path, exist_ok=True)
os.makedirs(val_labels_path, exist_ok=True)
# Get list of images
images = [f for f in os.listdir(images_path) if f.endswith('.png')]
# Split the data
train_images, val_images = train_test_split(images, test_size=0.2, random_state=42)
# Move files to train and val folders
for img in train_images:
shutil.move(os.path.join(images_path, img), train_images_path)
txt_file = img.replace('.png', '.txt')
shutil.move(os.path.join(labels_path, txt_file), train_labels_path)
for img in val_images:
shutil.move(os.path.join(images_path, img), val_images_path)
txt_file = img.replace('.png', '.txt')
shutil.move(os.path.join(labels_path, txt_file), val_labels_path)
In [ ]:
In [ ]:
# Run train.py from within Jupyter Notebook
!python train.py
Ultralytics YOLOv8.2.91 🚀 Python-3.12.5 torch-2.4.1 CPU (Apple M1 Max) engine/trainer: task=detect, mode=train, model=yolov8n.pt, data=data.yaml, epochs=100, time=None, patience=100, batch=16, imgsz=640, save=True, save_period=1, cache=False, device=cpu, workers=8, project=None, name=snail-detection3, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=/opt/homebrew/runs/detect/snail-detection3 Overriding model.yaml nc=80 with nc=7 from n params module arguments 0 -1 1 464 ultralytics.nn.modules.conv.Conv [3, 16, 3, 2] 1 -1 1 4672 ultralytics.nn.modules.conv.Conv [16, 32, 3, 2] 2 -1 1 7360 ultralytics.nn.modules.block.C2f [32, 32, 1, True] 3 -1 1 18560 ultralytics.nn.modules.conv.Conv [32, 64, 3, 2] 4 -1 2 49664 ultralytics.nn.modules.block.C2f [64, 64, 2, True] 5 -1 1 73984 ultralytics.nn.modules.conv.Conv [64, 128, 3, 2] 6 -1 2 197632 ultralytics.nn.modules.block.C2f [128, 128, 2, True] 7 -1 1 295424 ultralytics.nn.modules.conv.Conv [128, 256, 3, 2] 8 -1 1 460288 ultralytics.nn.modules.block.C2f [256, 256, 1, True] 9 -1 1 164608 ultralytics.nn.modules.block.SPPF [256, 256, 5] 10 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 11 [-1, 6] 1 0 ultralytics.nn.modules.conv.Concat [1] 12 -1 1 148224 ultralytics.nn.modules.block.C2f [384, 128, 1] 13 -1 1 0 torch.nn.modules.upsampling.Upsample [None, 2, 'nearest'] 14 [-1, 4] 1 0 ultralytics.nn.modules.conv.Concat [1] 15 -1 1 37248 ultralytics.nn.modules.block.C2f [192, 64, 1] 16 -1 1 36992 ultralytics.nn.modules.conv.Conv [64, 64, 3, 2] 17 [-1, 12] 1 0 ultralytics.nn.modules.conv.Concat [1] 18 -1 1 123648 ultralytics.nn.modules.block.C2f [192, 128, 1] 19 -1 1 147712 ultralytics.nn.modules.conv.Conv [128, 128, 3, 2] 20 [-1, 9] 1 0 ultralytics.nn.modules.conv.Concat [1] 21 -1 1 493056 ultralytics.nn.modules.block.C2f [384, 256, 1] 22 [15, 18, 21] 1 752677 ultralytics.nn.modules.head.Detect [7, [64, 128, 256]] Model summary: 225 layers, 3,012,213 parameters, 3,012,197 gradients, 8.2 GFLOPs Transferred 319/355 items from pretrained weights TensorBoard: Start with 'tensorboard --logdir /opt/homebrew/runs/detect/snail-detection3', view at http://localhost:6006/ Freezing layer 'model.22.dfl.conv.weight' train: Scanning /Users/alexsciuto/Library/Mobile Documents/com~apple~CloudDocs/D train: New cache created: /Users/alexsciuto/Library/Mobile Documents/com~apple~CloudDocs/DataWithAlex/snail-tracker/snail-data/train/labels.cache val: Scanning /Users/alexsciuto/Library/Mobile Documents/com~apple~CloudDocs/Dat val: New cache created: /Users/alexsciuto/Library/Mobile Documents/com~apple~CloudDocs/DataWithAlex/snail-tracker/snail-data/val/labels.cache Plotting labels to /opt/homebrew/runs/detect/snail-detection3/labels.jpg... optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... optimizer: AdamW(lr=0.000909, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0) TensorBoard: model graph visualization added ✅ Image sizes 640 train, 640 val Using 0 dataloader workers Logging results to /opt/homebrew/runs/detect/snail-detection3 Starting training for 100 epochs... Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 1/100 0G 1.406 4.043 1.375 204 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0123 0.347 0.027 0.0119 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 2/100 0G 1.398 4.09 1.359 234 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.012 0.347 0.044 0.0227 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 3/100 0G 1.445 4.059 1.369 286 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0119 0.347 0.075 0.0603 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 4/100 0G 1.371 4.024 1.345 212 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.012 0.347 0.101 0.0834 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 5/100 0G 1.318 3.94 1.301 233 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.012 0.347 0.174 0.144 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 6/100 0G 1.264 3.84 1.255 230 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0118 0.347 0.181 0.151 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 7/100 0G 1.27 3.811 1.258 199 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0128 0.366 0.201 0.172 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 8/100 0G 1.11 3.773 1.165 234 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0146 0.449 0.185 0.15 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 9/100 0G 1.148 3.639 1.19 205 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0168 0.47 0.2 0.16 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 10/100 0G 1.063 3.581 1.079 214 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0191 0.532 0.19 0.144 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 11/100 0G 1.124 3.463 1.117 190 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.022 0.634 0.205 0.159 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 12/100 0G 1.1 3.54 1.069 243 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0222 0.634 0.233 0.189 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 13/100 0G 1.193 3.342 1.184 164 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0243 0.718 0.268 0.221 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 14/100 0G 1.068 3.276 1.04 248 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0255 0.759 0.295 0.246 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 15/100 0G 1.064 3.201 1.048 225 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0263 0.759 0.286 0.242 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 16/100 0G 1 3.044 1.012 264 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0273 0.759 0.27 0.225 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 17/100 0G 1.066 2.845 1.074 234 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0286 0.759 0.271 0.226 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 18/100 0G 0.9923 2.659 1.013 251 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0286 0.759 0.271 0.226 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 19/100 0G 1.013 2.813 1.01 278 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0314 0.778 0.285 0.233 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 20/100 0G 0.9826 2.558 1.011 219 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0314 0.778 0.285 0.233 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 21/100 0G 0.9568 2.568 1.027 233 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.034 0.778 0.352 0.283 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 22/100 0G 1.103 2.468 1.089 213 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.034 0.778 0.352 0.283 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 23/100 0G 1.041 2.464 1.075 223 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.036 0.778 0.406 0.322 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 24/100 0G 1.079 2.371 1.066 219 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.036 0.778 0.406 0.322 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 25/100 0G 1.014 2.271 1.053 205 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0384 0.778 0.419 0.337 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 26/100 0G 1.024 2.076 1.081 205 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0384 0.778 0.419 0.337 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 27/100 0G 1.07 2.2 1.077 225 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0468 0.833 0.441 0.357 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 28/100 0G 1.062 2.035 1.062 263 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0468 0.833 0.441 0.357 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 29/100 0G 1.009 1.974 1.042 218 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0533 0.833 0.483 0.403 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 30/100 0G 0.9945 2.103 1.072 201 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0533 0.833 0.483 0.403 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 31/100 0G 1.113 1.986 1.072 213 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0562 0.667 0.475 0.407 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 32/100 0G 1.037 1.819 1.043 264 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0562 0.667 0.475 0.407 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 33/100 0G 1.027 1.791 1.033 277 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0565 0.667 0.507 0.439 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 34/100 0G 1.031 1.6 1.048 228 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.0565 0.667 0.507 0.439 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 35/100 0G 1.019 1.84 1.016 282 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.657 0.606 0.511 0.445 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 36/100 0G 0.9679 1.574 1.023 232 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.657 0.606 0.511 0.445 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 37/100 0G 1.009 1.721 1.103 206 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.807 0.425 0.511 0.442 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 38/100 0G 0.9752 1.572 1.027 246 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.807 0.425 0.511 0.442 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 39/100 0G 1.023 1.556 1.062 218 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.811 0.424 0.547 0.464 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 40/100 0G 0.9317 1.477 1.042 226 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.811 0.424 0.547 0.464 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 41/100 0G 0.9648 1.494 1.067 269 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.775 0.41 0.559 0.466 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 42/100 0G 0.9885 1.427 1.064 211 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.775 0.41 0.559 0.466 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 43/100 0G 0.9654 1.37 1.039 232 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.814 0.406 0.589 0.486 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 44/100 0G 0.9514 1.257 1.021 218 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.814 0.406 0.589 0.486 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 45/100 0G 0.9986 1.41 1.03 288 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.919 0.228 0.682 0.536 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 46/100 0G 0.9594 1.464 1.02 204 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.919 0.228 0.682 0.536 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 47/100 0G 0.9652 1.352 1.014 243 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.916 0.228 0.702 0.564 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 48/100 0G 0.9939 1.5 1.071 176 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.916 0.228 0.702 0.564 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 49/100 0G 0.9639 1.103 1.019 271 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.823 0.494 0.671 0.543 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 50/100 0G 0.9691 1.381 1.016 239 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.823 0.494 0.671 0.543 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 51/100 0G 1.004 1.201 1.011 286 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.101 0.773 0.612 0.509 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 52/100 0G 0.948 1.207 1.048 224 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.101 0.773 0.612 0.509 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 53/100 0G 0.8988 1.065 1.005 269 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.101 0.773 0.612 0.509 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 54/100 0G 0.9405 1.166 1.033 186 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.811 0.484 0.599 0.498 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 55/100 0G 0.8745 1.066 1.024 178 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.811 0.484 0.599 0.498 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 56/100 0G 0.8914 1.165 0.9998 209 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.811 0.484 0.599 0.498 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 57/100 0G 0.9111 1.347 0.9896 247 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.935 0.222 0.606 0.482 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 58/100 0G 0.902 1.13 0.9904 260 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.935 0.222 0.606 0.482 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 59/100 0G 0.934 1.193 1.004 271 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.935 0.222 0.606 0.482 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 60/100 0G 0.9166 1.108 0.9672 283 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.303 0.649 0.516 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 61/100 0G 0.896 1.197 0.989 232 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.303 0.649 0.516 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 62/100 0G 0.8933 1.118 0.9988 255 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.303 0.649 0.516 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 63/100 0G 0.8904 1.048 1.013 218 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.315 0.751 0.601 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 64/100 0G 0.8871 1.107 0.9791 266 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.315 0.751 0.601 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 65/100 0G 0.914 1.181 1.052 187 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.315 0.751 0.601 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 66/100 0G 0.8898 1.187 1.02 212 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.319 0.772 0.615 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 67/100 0G 0.8704 1.07 0.9914 226 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.319 0.772 0.615 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 68/100 0G 0.8865 1.108 0.9771 246 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.871 0.319 0.772 0.615 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 69/100 0G 0.9107 1.125 0.9971 261 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.32 0.772 0.616 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 70/100 0G 0.8774 1.021 0.9794 206 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.32 0.772 0.616 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 71/100 0G 0.8639 1.046 0.9659 271 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.869 0.32 0.772 0.616 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 72/100 0G 0.897 0.9755 1.001 244 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.321 0.795 0.643 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 73/100 0G 0.8599 0.9553 1.001 221 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.321 0.795 0.643 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 74/100 0G 0.893 1.106 0.9647 312 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.321 0.795 0.643 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 75/100 0G 0.9045 1.111 1.012 195 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.322 0.825 0.637 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 76/100 0G 0.8544 1.051 0.9883 207 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.322 0.825 0.637 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 77/100 0G 0.871 0.9894 0.9982 195 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.868 0.322 0.825 0.637 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 78/100 0G 0.8806 0.9951 0.9848 229 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.878 0.364 0.849 0.649 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 79/100 0G 0.8669 1.014 0.9735 273 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.878 0.364 0.849 0.649 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 80/100 0G 0.8503 0.9945 1.066 148 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.878 0.364 0.849 0.649 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 81/100 0G 0.8444 0.9236 0.988 248 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.874 0.426 0.849 0.655 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 82/100 0G 0.8355 0.8656 0.9544 220 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.874 0.426 0.849 0.655 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 83/100 0G 0.8356 0.9086 0.9765 208 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.874 0.426 0.849 0.655 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 84/100 0G 0.8529 1.006 0.9841 241 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.664 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 85/100 0G 0.8454 1.001 0.9679 271 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.664 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 86/100 0G 0.8573 0.9369 0.9626 278 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.664 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 87/100 0G 0.7955 1.057 0.9507 223 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.664 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 88/100 0G 0.7999 0.9166 0.9814 193 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.816 0.601 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 89/100 0G 0.8196 0.9903 0.9519 250 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.816 0.601 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 90/100 0G 0.815 0.9793 1.004 189 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.816 0.601 0.851 0.659 Closing dataloader mosaic Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 91/100 0G 0.8138 0.9869 0.9655 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.816 0.601 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 92/100 0G 0.8463 1.072 0.9563 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.668 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 93/100 0G 0.8194 1.021 0.9929 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.668 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 94/100 0G 0.7969 0.9752 0.9587 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.668 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 95/100 0G 0.821 1.005 0.9721 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.668 0.851 0.659 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 96/100 0G 0.8167 0.9854 0.9998 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.694 0.859 0.662 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 97/100 0G 0.8381 1.024 0.9438 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.694 0.859 0.662 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 98/100 0G 0.8309 1.007 1.004 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.694 0.859 0.662 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 99/100 0G 0.7944 0.9785 0.9777 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.827 0.694 0.859 0.662 Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 100/100 0G 0.786 0.9887 0.976 118 640: 1 Class Images Instances Box(P R mAP50 m all 4 32 0.783 0.839 0.857 0.662 100 epochs completed in 0.218 hours. Optimizer stripped from /opt/homebrew/runs/detect/snail-detection3/weights/last.pt, 6.2MB Optimizer stripped from /opt/homebrew/runs/detect/snail-detection3/weights/best.pt, 6.2MB Validating /opt/homebrew/runs/detect/snail-detection3/weights/best.pt... Ultralytics YOLOv8.2.91 🚀 Python-3.12.5 torch-2.4.1 CPU (Apple M1 Max) Model summary (fused): 168 layers, 3,007,013 parameters, 0 gradients, 8.1 GFLOPs Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.663 Cucumber 4 9 0.813 0.778 0.762 0.603 Snail 4 4 1 0.359 0.995 0.485 Snail Food 4 4 1 0 0.845 0.713 Water Bowl 3 3 0.607 1 0.995 0.913 Hydrometer 4 4 1 0 0.6 0.477 Lettuce 4 8 0.858 0.875 0.9 0.784 Speed: 0.3ms preprocess, 43.3ms inference, 0.0ms loss, 1.8ms postprocess per image Results saved to /opt/homebrew/runs/detect/snail-detection3 Ultralytics YOLOv8.2.91 🚀 Python-3.12.5 torch-2.4.1 CPU (Apple M1 Max) Model summary (fused): 168 layers, 3,007,013 parameters, 0 gradients, 8.1 GFLOPs val: Scanning /Users/alexsciuto/Library/Mobile Documents/com~apple~CloudDocs/Dat Class Images Instances Box(P R mAP50 m all 4 32 0.88 0.502 0.849 0.663 Cucumber 4 9 0.813 0.778 0.762 0.603 Snail 4 4 1 0.359 0.995 0.485 Snail Food 4 4 1 0 0.845 0.713 Water Bowl 3 3 0.607 1 0.995 0.913 Hydrometer 4 4 1 0 0.6 0.477 Lettuce 4 8 0.858 0.875 0.9 0.784 Speed: 0.3ms preprocess, 48.1ms inference, 0.0ms loss, 2.1ms postprocess per image Results saved to /opt/homebrew/runs/detect/snail-detection32 Ultralytics YOLOv8.2.91 🚀 Python-3.12.5 torch-2.4.1 CPU (Apple M1 Max) PyTorch: starting from '/opt/homebrew/runs/detect/snail-detection3/weights/best.pt' with input shape (1, 3, 640, 640) BCHW and output shape(s) (1, 11, 8400) (5.9 MB) requirements: Ultralytics requirement ['onnx>=1.12.0'] not found, attempting AutoUpdate... Collecting onnx>=1.12.0 Downloading onnx-1.16.2-cp312-cp312-macosx_11_0_universal2.whl.metadata (16 kB) Requirement already satisfied: numpy>=1.20 in ./env/lib/python3.12/site-packages (from onnx>=1.12.0) (1.26.4) Requirement already satisfied: protobuf>=3.20.2 in ./env/lib/python3.12/site-packages (from onnx>=1.12.0) (4.25.4) Downloading onnx-1.16.2-cp312-cp312-macosx_11_0_universal2.whl (16.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.5/16.5 MB 26.0 MB/s eta 0:00:00a 0:00:01 Installing collected packages: onnx Successfully installed onnx-1.16.2 requirements: AutoUpdate success ✅ 4.3s, installed 1 package: ['onnx>=1.12.0'] requirements: ⚠️ Restart runtime or rerun command for updates to take effect ONNX: starting export with onnx 1.16.2 opset 19... ONNX: export success ✅ 5.1s, saved as '/opt/homebrew/runs/detect/snail-detection3/weights/best.onnx' (11.7 MB) Export complete (5.4s) Results saved to /opt/homebrew/runs/detect/snail-detection3/weights Predict: yolo predict task=detect model=/opt/homebrew/runs/detect/snail-detection3/weights/best.onnx imgsz=640 Validate: yolo val task=detect model=/opt/homebrew/runs/detect/snail-detection3/weights/best.onnx imgsz=640 data=data.yaml Visualize: https://netron.app Training completed. Checkpoints are saved in the 'runs' directory. Validation metrics: ultralytics.utils.metrics.DetMetrics object with attributes: ap_class_index: array([0, 1, 2, 3, 4, 5]) box: ultralytics.utils.metrics.Metric object confusion_matrix: <ultralytics.utils.metrics.ConfusionMatrix object at 0x315700a40> curves: ['Precision-Recall(B)', 'F1-Confidence(B)', 'Precision-Confidence(B)', 'Recall-Confidence(B)'] curves_results: [[array([ 0, 0.001001, 0.002002, 0.003003, 0.004004, 0.005005, 0.006006, 0.007007, 0.008008, 0.009009, 0.01001, 0.011011, 0.012012, 0.013013, 0.014014, 0.015015, 0.016016, 0.017017, 0.018018, 0.019019, 0.02002, 0.021021, 0.022022, 0.023023, 0.024024, 0.025025, 0.026026, 0.027027, 0.028028, 0.029029, 0.03003, 0.031031, 0.032032, 0.033033, 0.034034, 0.035035, 0.036036, 0.037037, 0.038038, 0.039039, 0.04004, 0.041041, 0.042042, 0.043043, 0.044044, 0.045045, 0.046046, 0.047047, 0.048048, 0.049049, 0.05005, 0.051051, 0.052052, 0.053053, 0.054054, 0.055055, 0.056056, 0.057057, 0.058058, 0.059059, 0.06006, 0.061061, 0.062062, 0.063063, 0.064064, 0.065065, 0.066066, 0.067067, 0.068068, 0.069069, 0.07007, 0.071071, 0.072072, 0.073073, 0.074074, 0.075075, 0.076076, 0.077077, 0.078078, 0.079079, 0.08008, 0.081081, 0.082082, 0.083083, 0.084084, 0.085085, 0.086086, 0.087087, 0.088088, 0.089089, 0.09009, 0.091091, 0.092092, 0.093093, 0.094094, 0.095095, 0.096096, 0.097097, 0.098098, 0.099099, 0.1001, 0.1011, 0.1021, 0.1031, 0.1041, 0.10511, 0.10611, 0.10711, 0.10811, 0.10911, 0.11011, 0.11111, 0.11211, 0.11311, 0.11411, 0.11512, 0.11612, 0.11712, 0.11812, 0.11912, 0.12012, 0.12112, 0.12212, 0.12312, 0.12412, 0.12513, 0.12613, 0.12713, 0.12813, 0.12913, 0.13013, 0.13113, 0.13213, 0.13313, 0.13413, 0.13514, 0.13614, 0.13714, 0.13814, 0.13914, 0.14014, 0.14114, 0.14214, 0.14314, 0.14414, 0.14515, 0.14615, 0.14715, 0.14815, 0.14915, 0.15015, 0.15115, 0.15215, 0.15315, 0.15415, 0.15516, 0.15616, 0.15716, 0.15816, 0.15916, 0.16016, 0.16116, 0.16216, 0.16316, 0.16416, 0.16517, 0.16617, 0.16717, 0.16817, 0.16917, 0.17017, 0.17117, 0.17217, 0.17317, 0.17417, 0.17518, 0.17618, 0.17718, 0.17818, 0.17918, 0.18018, 0.18118, 0.18218, 0.18318, 0.18418, 0.18519, 0.18619, 0.18719, 0.18819, 0.18919, 0.19019, 0.19119, 0.19219, 0.19319, 0.19419, 0.1952, 0.1962, 0.1972, 0.1982, 0.1992, 0.2002, 0.2012, 0.2022, 0.2032, 0.2042, 0.20521, 0.20621, 0.20721, 0.20821, 0.20921, 0.21021, 0.21121, 0.21221, 0.21321, 0.21421, 0.21522, 0.21622, 0.21722, 0.21822, 0.21922, 0.22022, 0.22122, 0.22222, 0.22322, 0.22422, 0.22523, 0.22623, 0.22723, 0.22823, 0.22923, 0.23023, 0.23123, 0.23223, 0.23323, 0.23423, 0.23524, 0.23624, 0.23724, 0.23824, 0.23924, 0.24024, 0.24124, 0.24224, 0.24324, 0.24424, 0.24525, 0.24625, 0.24725, 0.24825, 0.24925, 0.25025, 0.25125, 0.25225, 0.25325, 0.25425, 0.25526, 0.25626, 0.25726, 0.25826, 0.25926, 0.26026, 0.26126, 0.26226, 0.26326, 0.26426, 0.26527, 0.26627, 0.26727, 0.26827, 0.26927, 0.27027, 0.27127, 0.27227, 0.27327, 0.27427, 0.27528, 0.27628, 0.27728, 0.27828, 0.27928, 0.28028, 0.28128, 0.28228, 0.28328, 0.28428, 0.28529, 0.28629, 0.28729, 0.28829, 0.28929, 0.29029, 0.29129, 0.29229, 0.29329, 0.29429, 0.2953, 0.2963, 0.2973, 0.2983, 0.2993, 0.3003, 0.3013, 0.3023, 0.3033, 0.3043, 0.30531, 0.30631, 0.30731, 0.30831, 0.30931, 0.31031, 0.31131, 0.31231, 0.31331, 0.31431, 0.31532, 0.31632, 0.31732, 0.31832, 0.31932, 0.32032, 0.32132, 0.32232, 0.32332, 0.32432, 0.32533, 0.32633, 0.32733, 0.32833, 0.32933, 0.33033, 0.33133, 0.33233, 0.33333, 0.33433, 0.33534, 0.33634, 0.33734, 0.33834, 0.33934, 0.34034, 0.34134, 0.34234, 0.34334, 0.34434, 0.34535, 0.34635, 0.34735, 0.34835, 0.34935, 0.35035, 0.35135, 0.35235, 0.35335, 0.35435, 0.35536, 0.35636, 0.35736, 0.35836, 0.35936, 0.36036, 0.36136, 0.36236, 0.36336, 0.36436, 0.36537, 0.36637, 0.36737, 0.36837, 0.36937, 0.37037, 0.37137, 0.37237, 0.37337, 0.37437, 0.37538, 0.37638, 0.37738, 0.37838, 0.37938, 0.38038, 0.38138, 0.38238, 0.38338, 0.38438, 0.38539, 0.38639, 0.38739, 0.38839, 0.38939, 0.39039, 0.39139, 0.39239, 0.39339, 0.39439, 0.3954, 0.3964, 0.3974, 0.3984, 0.3994, 0.4004, 0.4014, 0.4024, 0.4034, 0.4044, 0.40541, 0.40641, 0.40741, 0.40841, 0.40941, 0.41041, 0.41141, 0.41241, 0.41341, 0.41441, 0.41542, 0.41642, 0.41742, 0.41842, 0.41942, 0.42042, 0.42142, 0.42242, 0.42342, 0.42442, 0.42543, 0.42643, 0.42743, 0.42843, 0.42943, 0.43043, 0.43143, 0.43243, 0.43343, 0.43443, 0.43544, 0.43644, 0.43744, 0.43844, 0.43944, 0.44044, 0.44144, 0.44244, 0.44344, 0.44444, 0.44545, 0.44645, 0.44745, 0.44845, 0.44945, 0.45045, 0.45145, 0.45245, 0.45345, 0.45445, 0.45546, 0.45646, 0.45746, 0.45846, 0.45946, 0.46046, 0.46146, 0.46246, 0.46346, 0.46446, 0.46547, 0.46647, 0.46747, 0.46847, 0.46947, 0.47047, 0.47147, 0.47247, 0.47347, 0.47447, 0.47548, 0.47648, 0.47748, 0.47848, 0.47948, 0.48048, 0.48148, 0.48248, 0.48348, 0.48448, 0.48549, 0.48649, 0.48749, 0.48849, 0.48949, 0.49049, 0.49149, 0.49249, 0.49349, 0.49449, 0.4955, 0.4965, 0.4975, 0.4985, 0.4995, 0.5005, 0.5015, 0.5025, 0.5035, 0.5045, 0.50551, 0.50651, 0.50751, 0.50851, 0.50951, 0.51051, 0.51151, 0.51251, 0.51351, 0.51451, 0.51552, 0.51652, 0.51752, 0.51852, 0.51952, 0.52052, 0.52152, 0.52252, 0.52352, 0.52452, 0.52553, 0.52653, 0.52753, 0.52853, 0.52953, 0.53053, 0.53153, 0.53253, 0.53353, 0.53453, 0.53554, 0.53654, 0.53754, 0.53854, 0.53954, 0.54054, 0.54154, 0.54254, 0.54354, 0.54454, 0.54555, 0.54655, 0.54755, 0.54855, 0.54955, 0.55055, 0.55155, 0.55255, 0.55355, 0.55455, 0.55556, 0.55656, 0.55756, 0.55856, 0.55956, 0.56056, 0.56156, 0.56256, 0.56356, 0.56456, 0.56557, 0.56657, 0.56757, 0.56857, 0.56957, 0.57057, 0.57157, 0.57257, 0.57357, 0.57457, 0.57558, 0.57658, 0.57758, 0.57858, 0.57958, 0.58058, 0.58158, 0.58258, 0.58358, 0.58458, 0.58559, 0.58659, 0.58759, 0.58859, 0.58959, 0.59059, 0.59159, 0.59259, 0.59359, 0.59459, 0.5956, 0.5966, 0.5976, 0.5986, 0.5996, 0.6006, 0.6016, 0.6026, 0.6036, 0.6046, 0.60561, 0.60661, 0.60761, 0.60861, 0.60961, 0.61061, 0.61161, 0.61261, 0.61361, 0.61461, 0.61562, 0.61662, 0.61762, 0.61862, 0.61962, 0.62062, 0.62162, 0.62262, 0.62362, 0.62462, 0.62563, 0.62663, 0.62763, 0.62863, 0.62963, 0.63063, 0.63163, 0.63263, 0.63363, 0.63463, 0.63564, 0.63664, 0.63764, 0.63864, 0.63964, 0.64064, 0.64164, 0.64264, 0.64364, 0.64464, 0.64565, 0.64665, 0.64765, 0.64865, 0.64965, 0.65065, 0.65165, 0.65265, 0.65365, 0.65465, 0.65566, 0.65666, 0.65766, 0.65866, 0.65966, 0.66066, 0.66166, 0.66266, 0.66366, 0.66466, 0.66567, 0.66667, 0.66767, 0.66867, 0.66967, 0.67067, 0.67167, 0.67267, 0.67367, 0.67467, 0.67568, 0.67668, 0.67768, 0.67868, 0.67968, 0.68068, 0.68168, 0.68268, 0.68368, 0.68468, 0.68569, 0.68669, 0.68769, 0.68869, 0.68969, 0.69069, 0.69169, 0.69269, 0.69369, 0.69469, 0.6957, 0.6967, 0.6977, 0.6987, 0.6997, 0.7007, 0.7017, 0.7027, 0.7037, 0.7047, 0.70571, 0.70671, 0.70771, 0.70871, 0.70971, 0.71071, 0.71171, 0.71271, 0.71371, 0.71471, 0.71572, 0.71672, 0.71772, 0.71872, 0.71972, 0.72072, 0.72172, 0.72272, 0.72372, 0.72472, 0.72573, 0.72673, 0.72773, 0.72873, 0.72973, 0.73073, 0.73173, 0.73273, 0.73373, 0.73473, 0.73574, 0.73674, 0.73774, 0.73874, 0.73974, 0.74074, 0.74174, 0.74274, 0.74374, 0.74474, 0.74575, 0.74675, 0.74775, 0.74875, 0.74975, 0.75075, 0.75175, 0.75275, 0.75375, 0.75475, 0.75576, 0.75676, 0.75776, 0.75876, 0.75976, 0.76076, 0.76176, 0.76276, 0.76376, 0.76476, 0.76577, 0.76677, 0.76777, 0.76877, 0.76977, 0.77077, 0.77177, 0.77277, 0.77377, 0.77477, 0.77578, 0.77678, 0.77778, 0.77878, 0.77978, 0.78078, 0.78178, 0.78278, 0.78378, 0.78478, 0.78579, 0.78679, 0.78779, 0.78879, 0.78979, 0.79079, 0.79179, 0.79279, 0.79379, 0.79479, 0.7958, 0.7968, 0.7978, 0.7988, 0.7998, 0.8008, 0.8018, 0.8028, 0.8038, 0.8048, 0.80581, 0.80681, 0.80781, 0.80881, 0.80981, 0.81081, 0.81181, 0.81281, 0.81381, 0.81481, 0.81582, 0.81682, 0.81782, 0.81882, 0.81982, 0.82082, 0.82182, 0.82282, 0.82382, 0.82482, 0.82583, 0.82683, 0.82783, 0.82883, 0.82983, 0.83083, 0.83183, 0.83283, 0.83383, 0.83483, 0.83584, 0.83684, 0.83784, 0.83884, 0.83984, 0.84084, 0.84184, 0.84284, 0.84384, 0.84484, 0.84585, 0.84685, 0.84785, 0.84885, 0.84985, 0.85085, 0.85185, 0.85285, 0.85385, 0.85485, 0.85586, 0.85686, 0.85786, 0.85886, 0.85986, 0.86086, 0.86186, 0.86286, 0.86386, 0.86486, 0.86587, 0.86687, 0.86787, 0.86887, 0.86987, 0.87087, 0.87187, 0.87287, 0.87387, 0.87487, 0.87588, 0.87688, 0.87788, 0.87888, 0.87988, 0.88088, 0.88188, 0.88288, 0.88388, 0.88488, 0.88589, 0.88689, 0.88789, 0.88889, 0.88989, 0.89089, 0.89189, 0.89289, 0.89389, 0.89489, 0.8959, 0.8969, 0.8979, 0.8989, 0.8999, 0.9009, 0.9019, 0.9029, 0.9039, 0.9049, 0.90591, 0.90691, 0.90791, 0.90891, 0.90991, 0.91091, 0.91191, 0.91291, 0.91391, 0.91491, 0.91592, 0.91692, 0.91792, 0.91892, 0.91992, 0.92092, 0.92192, 0.92292, 0.92392, 0.92492, 0.92593, 0.92693, 0.92793, 0.92893, 0.92993, 0.93093, 0.93193, 0.93293, 0.93393, 0.93493, 0.93594, 0.93694, 0.93794, 0.93894, 0.93994, 0.94094, 0.94194, 0.94294, 0.94394, 0.94494, 0.94595, 0.94695, 0.94795, 0.94895, 0.94995, 0.95095, 0.95195, 0.95295, 0.95395, 0.95495, 0.95596, 0.95696, 0.95796, 0.95896, 0.95996, 0.96096, 0.96196, 0.96296, 0.96396, 0.96496, 0.96597, 0.96697, 0.96797, 0.96897, 0.96997, 0.97097, 0.97197, 0.97297, 0.97397, 0.97497, 0.97598, 0.97698, 0.97798, 0.97898, 0.97998, 0.98098, 0.98198, 0.98298, 0.98398, 0.98498, 0.98599, 0.98699, 0.98799, 0.98899, 0.98999, 0.99099, 0.99199, 0.99299, 0.99399, 0.99499, 0.996, 0.997, 0.998, 0.999, 1]), array([[ 1, 1, 1, ..., 0.0032032, 0.0016016, 0], [ 1, 1, 1, ..., 1, 1, 0], [ 1, 1, 1, ..., 0.8, 0.8, 0], [ 1, 1, 1, ..., 1, 1, 0], [ 0.75, 0.75, 0.75, ..., 0.16667, 0.16667, 0], [ 1, 1, 1, ..., 0.72727, 0.72727, 0]]), 'Recall', 'Precision'], [array([ 0, 0.001001, 0.002002, 0.003003, 0.004004, 0.005005, 0.006006, 0.007007, 0.008008, 0.009009, 0.01001, 0.011011, 0.012012, 0.013013, 0.014014, 0.015015, 0.016016, 0.017017, 0.018018, 0.019019, 0.02002, 0.021021, 0.022022, 0.023023, 0.024024, 0.025025, 0.026026, 0.027027, 0.028028, 0.029029, 0.03003, 0.031031, 0.032032, 0.033033, 0.034034, 0.035035, 0.036036, 0.037037, 0.038038, 0.039039, 0.04004, 0.041041, 0.042042, 0.043043, 0.044044, 0.045045, 0.046046, 0.047047, 0.048048, 0.049049, 0.05005, 0.051051, 0.052052, 0.053053, 0.054054, 0.055055, 0.056056, 0.057057, 0.058058, 0.059059, 0.06006, 0.061061, 0.062062, 0.063063, 0.064064, 0.065065, 0.066066, 0.067067, 0.068068, 0.069069, 0.07007, 0.071071, 0.072072, 0.073073, 0.074074, 0.075075, 0.076076, 0.077077, 0.078078, 0.079079, 0.08008, 0.081081, 0.082082, 0.083083, 0.084084, 0.085085, 0.086086, 0.087087, 0.088088, 0.089089, 0.09009, 0.091091, 0.092092, 0.093093, 0.094094, 0.095095, 0.096096, 0.097097, 0.098098, 0.099099, 0.1001, 0.1011, 0.1021, 0.1031, 0.1041, 0.10511, 0.10611, 0.10711, 0.10811, 0.10911, 0.11011, 0.11111, 0.11211, 0.11311, 0.11411, 0.11512, 0.11612, 0.11712, 0.11812, 0.11912, 0.12012, 0.12112, 0.12212, 0.12312, 0.12412, 0.12513, 0.12613, 0.12713, 0.12813, 0.12913, 0.13013, 0.13113, 0.13213, 0.13313, 0.13413, 0.13514, 0.13614, 0.13714, 0.13814, 0.13914, 0.14014, 0.14114, 0.14214, 0.14314, 0.14414, 0.14515, 0.14615, 0.14715, 0.14815, 0.14915, 0.15015, 0.15115, 0.15215, 0.15315, 0.15415, 0.15516, 0.15616, 0.15716, 0.15816, 0.15916, 0.16016, 0.16116, 0.16216, 0.16316, 0.16416, 0.16517, 0.16617, 0.16717, 0.16817, 0.16917, 0.17017, 0.17117, 0.17217, 0.17317, 0.17417, 0.17518, 0.17618, 0.17718, 0.17818, 0.17918, 0.18018, 0.18118, 0.18218, 0.18318, 0.18418, 0.18519, 0.18619, 0.18719, 0.18819, 0.18919, 0.19019, 0.19119, 0.19219, 0.19319, 0.19419, 0.1952, 0.1962, 0.1972, 0.1982, 0.1992, 0.2002, 0.2012, 0.2022, 0.2032, 0.2042, 0.20521, 0.20621, 0.20721, 0.20821, 0.20921, 0.21021, 0.21121, 0.21221, 0.21321, 0.21421, 0.21522, 0.21622, 0.21722, 0.21822, 0.21922, 0.22022, 0.22122, 0.22222, 0.22322, 0.22422, 0.22523, 0.22623, 0.22723, 0.22823, 0.22923, 0.23023, 0.23123, 0.23223, 0.23323, 0.23423, 0.23524, 0.23624, 0.23724, 0.23824, 0.23924, 0.24024, 0.24124, 0.24224, 0.24324, 0.24424, 0.24525, 0.24625, 0.24725, 0.24825, 0.24925, 0.25025, 0.25125, 0.25225, 0.25325, 0.25425, 0.25526, 0.25626, 0.25726, 0.25826, 0.25926, 0.26026, 0.26126, 0.26226, 0.26326, 0.26426, 0.26527, 0.26627, 0.26727, 0.26827, 0.26927, 0.27027, 0.27127, 0.27227, 0.27327, 0.27427, 0.27528, 0.27628, 0.27728, 0.27828, 0.27928, 0.28028, 0.28128, 0.28228, 0.28328, 0.28428, 0.28529, 0.28629, 0.28729, 0.28829, 0.28929, 0.29029, 0.29129, 0.29229, 0.29329, 0.29429, 0.2953, 0.2963, 0.2973, 0.2983, 0.2993, 0.3003, 0.3013, 0.3023, 0.3033, 0.3043, 0.30531, 0.30631, 0.30731, 0.30831, 0.30931, 0.31031, 0.31131, 0.31231, 0.31331, 0.31431, 0.31532, 0.31632, 0.31732, 0.31832, 0.31932, 0.32032, 0.32132, 0.32232, 0.32332, 0.32432, 0.32533, 0.32633, 0.32733, 0.32833, 0.32933, 0.33033, 0.33133, 0.33233, 0.33333, 0.33433, 0.33534, 0.33634, 0.33734, 0.33834, 0.33934, 0.34034, 0.34134, 0.34234, 0.34334, 0.34434, 0.34535, 0.34635, 0.34735, 0.34835, 0.34935, 0.35035, 0.35135, 0.35235, 0.35335, 0.35435, 0.35536, 0.35636, 0.35736, 0.35836, 0.35936, 0.36036, 0.36136, 0.36236, 0.36336, 0.36436, 0.36537, 0.36637, 0.36737, 0.36837, 0.36937, 0.37037, 0.37137, 0.37237, 0.37337, 0.37437, 0.37538, 0.37638, 0.37738, 0.37838, 0.37938, 0.38038, 0.38138, 0.38238, 0.38338, 0.38438, 0.38539, 0.38639, 0.38739, 0.38839, 0.38939, 0.39039, 0.39139, 0.39239, 0.39339, 0.39439, 0.3954, 0.3964, 0.3974, 0.3984, 0.3994, 0.4004, 0.4014, 0.4024, 0.4034, 0.4044, 0.40541, 0.40641, 0.40741, 0.40841, 0.40941, 0.41041, 0.41141, 0.41241, 0.41341, 0.41441, 0.41542, 0.41642, 0.41742, 0.41842, 0.41942, 0.42042, 0.42142, 0.42242, 0.42342, 0.42442, 0.42543, 0.42643, 0.42743, 0.42843, 0.42943, 0.43043, 0.43143, 0.43243, 0.43343, 0.43443, 0.43544, 0.43644, 0.43744, 0.43844, 0.43944, 0.44044, 0.44144, 0.44244, 0.44344, 0.44444, 0.44545, 0.44645, 0.44745, 0.44845, 0.44945, 0.45045, 0.45145, 0.45245, 0.45345, 0.45445, 0.45546, 0.45646, 0.45746, 0.45846, 0.45946, 0.46046, 0.46146, 0.46246, 0.46346, 0.46446, 0.46547, 0.46647, 0.46747, 0.46847, 0.46947, 0.47047, 0.47147, 0.47247, 0.47347, 0.47447, 0.47548, 0.47648, 0.47748, 0.47848, 0.47948, 0.48048, 0.48148, 0.48248, 0.48348, 0.48448, 0.48549, 0.48649, 0.48749, 0.48849, 0.48949, 0.49049, 0.49149, 0.49249, 0.49349, 0.49449, 0.4955, 0.4965, 0.4975, 0.4985, 0.4995, 0.5005, 0.5015, 0.5025, 0.5035, 0.5045, 0.50551, 0.50651, 0.50751, 0.50851, 0.50951, 0.51051, 0.51151, 0.51251, 0.51351, 0.51451, 0.51552, 0.51652, 0.51752, 0.51852, 0.51952, 0.52052, 0.52152, 0.52252, 0.52352, 0.52452, 0.52553, 0.52653, 0.52753, 0.52853, 0.52953, 0.53053, 0.53153, 0.53253, 0.53353, 0.53453, 0.53554, 0.53654, 0.53754, 0.53854, 0.53954, 0.54054, 0.54154, 0.54254, 0.54354, 0.54454, 0.54555, 0.54655, 0.54755, 0.54855, 0.54955, 0.55055, 0.55155, 0.55255, 0.55355, 0.55455, 0.55556, 0.55656, 0.55756, 0.55856, 0.55956, 0.56056, 0.56156, 0.56256, 0.56356, 0.56456, 0.56557, 0.56657, 0.56757, 0.56857, 0.56957, 0.57057, 0.57157, 0.57257, 0.57357, 0.57457, 0.57558, 0.57658, 0.57758, 0.57858, 0.57958, 0.58058, 0.58158, 0.58258, 0.58358, 0.58458, 0.58559, 0.58659, 0.58759, 0.58859, 0.58959, 0.59059, 0.59159, 0.59259, 0.59359, 0.59459, 0.5956, 0.5966, 0.5976, 0.5986, 0.5996, 0.6006, 0.6016, 0.6026, 0.6036, 0.6046, 0.60561, 0.60661, 0.60761, 0.60861, 0.60961, 0.61061, 0.61161, 0.61261, 0.61361, 0.61461, 0.61562, 0.61662, 0.61762, 0.61862, 0.61962, 0.62062, 0.62162, 0.62262, 0.62362, 0.62462, 0.62563, 0.62663, 0.62763, 0.62863, 0.62963, 0.63063, 0.63163, 0.63263, 0.63363, 0.63463, 0.63564, 0.63664, 0.63764, 0.63864, 0.63964, 0.64064, 0.64164, 0.64264, 0.64364, 0.64464, 0.64565, 0.64665, 0.64765, 0.64865, 0.64965, 0.65065, 0.65165, 0.65265, 0.65365, 0.65465, 0.65566, 0.65666, 0.65766, 0.65866, 0.65966, 0.66066, 0.66166, 0.66266, 0.66366, 0.66466, 0.66567, 0.66667, 0.66767, 0.66867, 0.66967, 0.67067, 0.67167, 0.67267, 0.67367, 0.67467, 0.67568, 0.67668, 0.67768, 0.67868, 0.67968, 0.68068, 0.68168, 0.68268, 0.68368, 0.68468, 0.68569, 0.68669, 0.68769, 0.68869, 0.68969, 0.69069, 0.69169, 0.69269, 0.69369, 0.69469, 0.6957, 0.6967, 0.6977, 0.6987, 0.6997, 0.7007, 0.7017, 0.7027, 0.7037, 0.7047, 0.70571, 0.70671, 0.70771, 0.70871, 0.70971, 0.71071, 0.71171, 0.71271, 0.71371, 0.71471, 0.71572, 0.71672, 0.71772, 0.71872, 0.71972, 0.72072, 0.72172, 0.72272, 0.72372, 0.72472, 0.72573, 0.72673, 0.72773, 0.72873, 0.72973, 0.73073, 0.73173, 0.73273, 0.73373, 0.73473, 0.73574, 0.73674, 0.73774, 0.73874, 0.73974, 0.74074, 0.74174, 0.74274, 0.74374, 0.74474, 0.74575, 0.74675, 0.74775, 0.74875, 0.74975, 0.75075, 0.75175, 0.75275, 0.75375, 0.75475, 0.75576, 0.75676, 0.75776, 0.75876, 0.75976, 0.76076, 0.76176, 0.76276, 0.76376, 0.76476, 0.76577, 0.76677, 0.76777, 0.76877, 0.76977, 0.77077, 0.77177, 0.77277, 0.77377, 0.77477, 0.77578, 0.77678, 0.77778, 0.77878, 0.77978, 0.78078, 0.78178, 0.78278, 0.78378, 0.78478, 0.78579, 0.78679, 0.78779, 0.78879, 0.78979, 0.79079, 0.79179, 0.79279, 0.79379, 0.79479, 0.7958, 0.7968, 0.7978, 0.7988, 0.7998, 0.8008, 0.8018, 0.8028, 0.8038, 0.8048, 0.80581, 0.80681, 0.80781, 0.80881, 0.80981, 0.81081, 0.81181, 0.81281, 0.81381, 0.81481, 0.81582, 0.81682, 0.81782, 0.81882, 0.81982, 0.82082, 0.82182, 0.82282, 0.82382, 0.82482, 0.82583, 0.82683, 0.82783, 0.82883, 0.82983, 0.83083, 0.83183, 0.83283, 0.83383, 0.83483, 0.83584, 0.83684, 0.83784, 0.83884, 0.83984, 0.84084, 0.84184, 0.84284, 0.84384, 0.84484, 0.84585, 0.84685, 0.84785, 0.84885, 0.84985, 0.85085, 0.85185, 0.85285, 0.85385, 0.85485, 0.85586, 0.85686, 0.85786, 0.85886, 0.85986, 0.86086, 0.86186, 0.86286, 0.86386, 0.86486, 0.86587, 0.86687, 0.86787, 0.86887, 0.86987, 0.87087, 0.87187, 0.87287, 0.87387, 0.87487, 0.87588, 0.87688, 0.87788, 0.87888, 0.87988, 0.88088, 0.88188, 0.88288, 0.88388, 0.88488, 0.88589, 0.88689, 0.88789, 0.88889, 0.88989, 0.89089, 0.89189, 0.89289, 0.89389, 0.89489, 0.8959, 0.8969, 0.8979, 0.8989, 0.8999, 0.9009, 0.9019, 0.9029, 0.9039, 0.9049, 0.90591, 0.90691, 0.90791, 0.90891, 0.90991, 0.91091, 0.91191, 0.91291, 0.91391, 0.91491, 0.91592, 0.91692, 0.91792, 0.91892, 0.91992, 0.92092, 0.92192, 0.92292, 0.92392, 0.92492, 0.92593, 0.92693, 0.92793, 0.92893, 0.92993, 0.93093, 0.93193, 0.93293, 0.93393, 0.93493, 0.93594, 0.93694, 0.93794, 0.93894, 0.93994, 0.94094, 0.94194, 0.94294, 0.94394, 0.94494, 0.94595, 0.94695, 0.94795, 0.94895, 0.94995, 0.95095, 0.95195, 0.95295, 0.95395, 0.95495, 0.95596, 0.95696, 0.95796, 0.95896, 0.95996, 0.96096, 0.96196, 0.96296, 0.96396, 0.96496, 0.96597, 0.96697, 0.96797, 0.96897, 0.96997, 0.97097, 0.97197, 0.97297, 0.97397, 0.97497, 0.97598, 0.97698, 0.97798, 0.97898, 0.97998, 0.98098, 0.98198, 0.98298, 0.98398, 0.98498, 0.98599, 0.98699, 0.98799, 0.98899, 0.98999, 0.99099, 0.99199, 0.99299, 0.99399, 0.99499, 0.996, 0.997, 0.998, 0.999, 1]), array([[ 0.2963, 0.2963, 0.30987, ..., 0, 0, 0], [ 0.046784, 0.046784, 0.28964, ..., 0, 0, 0], [ 0.034783, 0.034783, 0.19099, ..., 0, 0, 0], [ 0.11538, 0.11538, 0.14143, ..., 0, 0, 0], [ 0.025478, 0.025478, 0.13108, ..., 0, 0, 0], [ 0.25, 0.25, 0.36781, ..., 0, 0, 0]]), 'Confidence', 'F1'], [array([ 0, 0.001001, 0.002002, 0.003003, 0.004004, 0.005005, 0.006006, 0.007007, 0.008008, 0.009009, 0.01001, 0.011011, 0.012012, 0.013013, 0.014014, 0.015015, 0.016016, 0.017017, 0.018018, 0.019019, 0.02002, 0.021021, 0.022022, 0.023023, 0.024024, 0.025025, 0.026026, 0.027027, 0.028028, 0.029029, 0.03003, 0.031031, 0.032032, 0.033033, 0.034034, 0.035035, 0.036036, 0.037037, 0.038038, 0.039039, 0.04004, 0.041041, 0.042042, 0.043043, 0.044044, 0.045045, 0.046046, 0.047047, 0.048048, 0.049049, 0.05005, 0.051051, 0.052052, 0.053053, 0.054054, 0.055055, 0.056056, 0.057057, 0.058058, 0.059059, 0.06006, 0.061061, 0.062062, 0.063063, 0.064064, 0.065065, 0.066066, 0.067067, 0.068068, 0.069069, 0.07007, 0.071071, 0.072072, 0.073073, 0.074074, 0.075075, 0.076076, 0.077077, 0.078078, 0.079079, 0.08008, 0.081081, 0.082082, 0.083083, 0.084084, 0.085085, 0.086086, 0.087087, 0.088088, 0.089089, 0.09009, 0.091091, 0.092092, 0.093093, 0.094094, 0.095095, 0.096096, 0.097097, 0.098098, 0.099099, 0.1001, 0.1011, 0.1021, 0.1031, 0.1041, 0.10511, 0.10611, 0.10711, 0.10811, 0.10911, 0.11011, 0.11111, 0.11211, 0.11311, 0.11411, 0.11512, 0.11612, 0.11712, 0.11812, 0.11912, 0.12012, 0.12112, 0.12212, 0.12312, 0.12412, 0.12513, 0.12613, 0.12713, 0.12813, 0.12913, 0.13013, 0.13113, 0.13213, 0.13313, 0.13413, 0.13514, 0.13614, 0.13714, 0.13814, 0.13914, 0.14014, 0.14114, 0.14214, 0.14314, 0.14414, 0.14515, 0.14615, 0.14715, 0.14815, 0.14915, 0.15015, 0.15115, 0.15215, 0.15315, 0.15415, 0.15516, 0.15616, 0.15716, 0.15816, 0.15916, 0.16016, 0.16116, 0.16216, 0.16316, 0.16416, 0.16517, 0.16617, 0.16717, 0.16817, 0.16917, 0.17017, 0.17117, 0.17217, 0.17317, 0.17417, 0.17518, 0.17618, 0.17718, 0.17818, 0.17918, 0.18018, 0.18118, 0.18218, 0.18318, 0.18418, 0.18519, 0.18619, 0.18719, 0.18819, 0.18919, 0.19019, 0.19119, 0.19219, 0.19319, 0.19419, 0.1952, 0.1962, 0.1972, 0.1982, 0.1992, 0.2002, 0.2012, 0.2022, 0.2032, 0.2042, 0.20521, 0.20621, 0.20721, 0.20821, 0.20921, 0.21021, 0.21121, 0.21221, 0.21321, 0.21421, 0.21522, 0.21622, 0.21722, 0.21822, 0.21922, 0.22022, 0.22122, 0.22222, 0.22322, 0.22422, 0.22523, 0.22623, 0.22723, 0.22823, 0.22923, 0.23023, 0.23123, 0.23223, 0.23323, 0.23423, 0.23524, 0.23624, 0.23724, 0.23824, 0.23924, 0.24024, 0.24124, 0.24224, 0.24324, 0.24424, 0.24525, 0.24625, 0.24725, 0.24825, 0.24925, 0.25025, 0.25125, 0.25225, 0.25325, 0.25425, 0.25526, 0.25626, 0.25726, 0.25826, 0.25926, 0.26026, 0.26126, 0.26226, 0.26326, 0.26426, 0.26527, 0.26627, 0.26727, 0.26827, 0.26927, 0.27027, 0.27127, 0.27227, 0.27327, 0.27427, 0.27528, 0.27628, 0.27728, 0.27828, 0.27928, 0.28028, 0.28128, 0.28228, 0.28328, 0.28428, 0.28529, 0.28629, 0.28729, 0.28829, 0.28929, 0.29029, 0.29129, 0.29229, 0.29329, 0.29429, 0.2953, 0.2963, 0.2973, 0.2983, 0.2993, 0.3003, 0.3013, 0.3023, 0.3033, 0.3043, 0.30531, 0.30631, 0.30731, 0.30831, 0.30931, 0.31031, 0.31131, 0.31231, 0.31331, 0.31431, 0.31532, 0.31632, 0.31732, 0.31832, 0.31932, 0.32032, 0.32132, 0.32232, 0.32332, 0.32432, 0.32533, 0.32633, 0.32733, 0.32833, 0.32933, 0.33033, 0.33133, 0.33233, 0.33333, 0.33433, 0.33534, 0.33634, 0.33734, 0.33834, 0.33934, 0.34034, 0.34134, 0.34234, 0.34334, 0.34434, 0.34535, 0.34635, 0.34735, 0.34835, 0.34935, 0.35035, 0.35135, 0.35235, 0.35335, 0.35435, 0.35536, 0.35636, 0.35736, 0.35836, 0.35936, 0.36036, 0.36136, 0.36236, 0.36336, 0.36436, 0.36537, 0.36637, 0.36737, 0.36837, 0.36937, 0.37037, 0.37137, 0.37237, 0.37337, 0.37437, 0.37538, 0.37638, 0.37738, 0.37838, 0.37938, 0.38038, 0.38138, 0.38238, 0.38338, 0.38438, 0.38539, 0.38639, 0.38739, 0.38839, 0.38939, 0.39039, 0.39139, 0.39239, 0.39339, 0.39439, 0.3954, 0.3964, 0.3974, 0.3984, 0.3994, 0.4004, 0.4014, 0.4024, 0.4034, 0.4044, 0.40541, 0.40641, 0.40741, 0.40841, 0.40941, 0.41041, 0.41141, 0.41241, 0.41341, 0.41441, 0.41542, 0.41642, 0.41742, 0.41842, 0.41942, 0.42042, 0.42142, 0.42242, 0.42342, 0.42442, 0.42543, 0.42643, 0.42743, 0.42843, 0.42943, 0.43043, 0.43143, 0.43243, 0.43343, 0.43443, 0.43544, 0.43644, 0.43744, 0.43844, 0.43944, 0.44044, 0.44144, 0.44244, 0.44344, 0.44444, 0.44545, 0.44645, 0.44745, 0.44845, 0.44945, 0.45045, 0.45145, 0.45245, 0.45345, 0.45445, 0.45546, 0.45646, 0.45746, 0.45846, 0.45946, 0.46046, 0.46146, 0.46246, 0.46346, 0.46446, 0.46547, 0.46647, 0.46747, 0.46847, 0.46947, 0.47047, 0.47147, 0.47247, 0.47347, 0.47447, 0.47548, 0.47648, 0.47748, 0.47848, 0.47948, 0.48048, 0.48148, 0.48248, 0.48348, 0.48448, 0.48549, 0.48649, 0.48749, 0.48849, 0.48949, 0.49049, 0.49149, 0.49249, 0.49349, 0.49449, 0.4955, 0.4965, 0.4975, 0.4985, 0.4995, 0.5005, 0.5015, 0.5025, 0.5035, 0.5045, 0.50551, 0.50651, 0.50751, 0.50851, 0.50951, 0.51051, 0.51151, 0.51251, 0.51351, 0.51451, 0.51552, 0.51652, 0.51752, 0.51852, 0.51952, 0.52052, 0.52152, 0.52252, 0.52352, 0.52452, 0.52553, 0.52653, 0.52753, 0.52853, 0.52953, 0.53053, 0.53153, 0.53253, 0.53353, 0.53453, 0.53554, 0.53654, 0.53754, 0.53854, 0.53954, 0.54054, 0.54154, 0.54254, 0.54354, 0.54454, 0.54555, 0.54655, 0.54755, 0.54855, 0.54955, 0.55055, 0.55155, 0.55255, 0.55355, 0.55455, 0.55556, 0.55656, 0.55756, 0.55856, 0.55956, 0.56056, 0.56156, 0.56256, 0.56356, 0.56456, 0.56557, 0.56657, 0.56757, 0.56857, 0.56957, 0.57057, 0.57157, 0.57257, 0.57357, 0.57457, 0.57558, 0.57658, 0.57758, 0.57858, 0.57958, 0.58058, 0.58158, 0.58258, 0.58358, 0.58458, 0.58559, 0.58659, 0.58759, 0.58859, 0.58959, 0.59059, 0.59159, 0.59259, 0.59359, 0.59459, 0.5956, 0.5966, 0.5976, 0.5986, 0.5996, 0.6006, 0.6016, 0.6026, 0.6036, 0.6046, 0.60561, 0.60661, 0.60761, 0.60861, 0.60961, 0.61061, 0.61161, 0.61261, 0.61361, 0.61461, 0.61562, 0.61662, 0.61762, 0.61862, 0.61962, 0.62062, 0.62162, 0.62262, 0.62362, 0.62462, 0.62563, 0.62663, 0.62763, 0.62863, 0.62963, 0.63063, 0.63163, 0.63263, 0.63363, 0.63463, 0.63564, 0.63664, 0.63764, 0.63864, 0.63964, 0.64064, 0.64164, 0.64264, 0.64364, 0.64464, 0.64565, 0.64665, 0.64765, 0.64865, 0.64965, 0.65065, 0.65165, 0.65265, 0.65365, 0.65465, 0.65566, 0.65666, 0.65766, 0.65866, 0.65966, 0.66066, 0.66166, 0.66266, 0.66366, 0.66466, 0.66567, 0.66667, 0.66767, 0.66867, 0.66967, 0.67067, 0.67167, 0.67267, 0.67367, 0.67467, 0.67568, 0.67668, 0.67768, 0.67868, 0.67968, 0.68068, 0.68168, 0.68268, 0.68368, 0.68468, 0.68569, 0.68669, 0.68769, 0.68869, 0.68969, 0.69069, 0.69169, 0.69269, 0.69369, 0.69469, 0.6957, 0.6967, 0.6977, 0.6987, 0.6997, 0.7007, 0.7017, 0.7027, 0.7037, 0.7047, 0.70571, 0.70671, 0.70771, 0.70871, 0.70971, 0.71071, 0.71171, 0.71271, 0.71371, 0.71471, 0.71572, 0.71672, 0.71772, 0.71872, 0.71972, 0.72072, 0.72172, 0.72272, 0.72372, 0.72472, 0.72573, 0.72673, 0.72773, 0.72873, 0.72973, 0.73073, 0.73173, 0.73273, 0.73373, 0.73473, 0.73574, 0.73674, 0.73774, 0.73874, 0.73974, 0.74074, 0.74174, 0.74274, 0.74374, 0.74474, 0.74575, 0.74675, 0.74775, 0.74875, 0.74975, 0.75075, 0.75175, 0.75275, 0.75375, 0.75475, 0.75576, 0.75676, 0.75776, 0.75876, 0.75976, 0.76076, 0.76176, 0.76276, 0.76376, 0.76476, 0.76577, 0.76677, 0.76777, 0.76877, 0.76977, 0.77077, 0.77177, 0.77277, 0.77377, 0.77477, 0.77578, 0.77678, 0.77778, 0.77878, 0.77978, 0.78078, 0.78178, 0.78278, 0.78378, 0.78478, 0.78579, 0.78679, 0.78779, 0.78879, 0.78979, 0.79079, 0.79179, 0.79279, 0.79379, 0.79479, 0.7958, 0.7968, 0.7978, 0.7988, 0.7998, 0.8008, 0.8018, 0.8028, 0.8038, 0.8048, 0.80581, 0.80681, 0.80781, 0.80881, 0.80981, 0.81081, 0.81181, 0.81281, 0.81381, 0.81481, 0.81582, 0.81682, 0.81782, 0.81882, 0.81982, 0.82082, 0.82182, 0.82282, 0.82382, 0.82482, 0.82583, 0.82683, 0.82783, 0.82883, 0.82983, 0.83083, 0.83183, 0.83283, 0.83383, 0.83483, 0.83584, 0.83684, 0.83784, 0.83884, 0.83984, 0.84084, 0.84184, 0.84284, 0.84384, 0.84484, 0.84585, 0.84685, 0.84785, 0.84885, 0.84985, 0.85085, 0.85185, 0.85285, 0.85385, 0.85485, 0.85586, 0.85686, 0.85786, 0.85886, 0.85986, 0.86086, 0.86186, 0.86286, 0.86386, 0.86486, 0.86587, 0.86687, 0.86787, 0.86887, 0.86987, 0.87087, 0.87187, 0.87287, 0.87387, 0.87487, 0.87588, 0.87688, 0.87788, 0.87888, 0.87988, 0.88088, 0.88188, 0.88288, 0.88388, 0.88488, 0.88589, 0.88689, 0.88789, 0.88889, 0.88989, 0.89089, 0.89189, 0.89289, 0.89389, 0.89489, 0.8959, 0.8969, 0.8979, 0.8989, 0.8999, 0.9009, 0.9019, 0.9029, 0.9039, 0.9049, 0.90591, 0.90691, 0.90791, 0.90891, 0.90991, 0.91091, 0.91191, 0.91291, 0.91391, 0.91491, 0.91592, 0.91692, 0.91792, 0.91892, 0.91992, 0.92092, 0.92192, 0.92292, 0.92392, 0.92492, 0.92593, 0.92693, 0.92793, 0.92893, 0.92993, 0.93093, 0.93193, 0.93293, 0.93393, 0.93493, 0.93594, 0.93694, 0.93794, 0.93894, 0.93994, 0.94094, 0.94194, 0.94294, 0.94394, 0.94494, 0.94595, 0.94695, 0.94795, 0.94895, 0.94995, 0.95095, 0.95195, 0.95295, 0.95395, 0.95495, 0.95596, 0.95696, 0.95796, 0.95896, 0.95996, 0.96096, 0.96196, 0.96296, 0.96396, 0.96496, 0.96597, 0.96697, 0.96797, 0.96897, 0.96997, 0.97097, 0.97197, 0.97297, 0.97397, 0.97497, 0.97598, 0.97698, 0.97798, 0.97898, 0.97998, 0.98098, 0.98198, 0.98298, 0.98398, 0.98498, 0.98599, 0.98699, 0.98799, 0.98899, 0.98999, 0.99099, 0.99199, 0.99299, 0.99399, 0.99499, 0.996, 0.997, 0.998, 0.999, 1]), array([[ 0.17778, 0.17778, 0.18764, ..., 1, 1, 1], [ 0.023952, 0.023952, 0.16935, ..., 1, 1, 1], [ 0.017699, 0.017699, 0.10558, ..., 1, 1, 1], [ 0.061224, 0.061224, 0.076098, ..., 1, 1, 1], [ 0.012903, 0.012903, 0.070135, ..., 1, 1, 1], [ 0.14286, 0.14286, 0.22534, ..., 1, 1, 1]]), 'Confidence', 'Precision'], [array([ 0, 0.001001, 0.002002, 0.003003, 0.004004, 0.005005, 0.006006, 0.007007, 0.008008, 0.009009, 0.01001, 0.011011, 0.012012, 0.013013, 0.014014, 0.015015, 0.016016, 0.017017, 0.018018, 0.019019, 0.02002, 0.021021, 0.022022, 0.023023, 0.024024, 0.025025, 0.026026, 0.027027, 0.028028, 0.029029, 0.03003, 0.031031, 0.032032, 0.033033, 0.034034, 0.035035, 0.036036, 0.037037, 0.038038, 0.039039, 0.04004, 0.041041, 0.042042, 0.043043, 0.044044, 0.045045, 0.046046, 0.047047, 0.048048, 0.049049, 0.05005, 0.051051, 0.052052, 0.053053, 0.054054, 0.055055, 0.056056, 0.057057, 0.058058, 0.059059, 0.06006, 0.061061, 0.062062, 0.063063, 0.064064, 0.065065, 0.066066, 0.067067, 0.068068, 0.069069, 0.07007, 0.071071, 0.072072, 0.073073, 0.074074, 0.075075, 0.076076, 0.077077, 0.078078, 0.079079, 0.08008, 0.081081, 0.082082, 0.083083, 0.084084, 0.085085, 0.086086, 0.087087, 0.088088, 0.089089, 0.09009, 0.091091, 0.092092, 0.093093, 0.094094, 0.095095, 0.096096, 0.097097, 0.098098, 0.099099, 0.1001, 0.1011, 0.1021, 0.1031, 0.1041, 0.10511, 0.10611, 0.10711, 0.10811, 0.10911, 0.11011, 0.11111, 0.11211, 0.11311, 0.11411, 0.11512, 0.11612, 0.11712, 0.11812, 0.11912, 0.12012, 0.12112, 0.12212, 0.12312, 0.12412, 0.12513, 0.12613, 0.12713, 0.12813, 0.12913, 0.13013, 0.13113, 0.13213, 0.13313, 0.13413, 0.13514, 0.13614, 0.13714, 0.13814, 0.13914, 0.14014, 0.14114, 0.14214, 0.14314, 0.14414, 0.14515, 0.14615, 0.14715, 0.14815, 0.14915, 0.15015, 0.15115, 0.15215, 0.15315, 0.15415, 0.15516, 0.15616, 0.15716, 0.15816, 0.15916, 0.16016, 0.16116, 0.16216, 0.16316, 0.16416, 0.16517, 0.16617, 0.16717, 0.16817, 0.16917, 0.17017, 0.17117, 0.17217, 0.17317, 0.17417, 0.17518, 0.17618, 0.17718, 0.17818, 0.17918, 0.18018, 0.18118, 0.18218, 0.18318, 0.18418, 0.18519, 0.18619, 0.18719, 0.18819, 0.18919, 0.19019, 0.19119, 0.19219, 0.19319, 0.19419, 0.1952, 0.1962, 0.1972, 0.1982, 0.1992, 0.2002, 0.2012, 0.2022, 0.2032, 0.2042, 0.20521, 0.20621, 0.20721, 0.20821, 0.20921, 0.21021, 0.21121, 0.21221, 0.21321, 0.21421, 0.21522, 0.21622, 0.21722, 0.21822, 0.21922, 0.22022, 0.22122, 0.22222, 0.22322, 0.22422, 0.22523, 0.22623, 0.22723, 0.22823, 0.22923, 0.23023, 0.23123, 0.23223, 0.23323, 0.23423, 0.23524, 0.23624, 0.23724, 0.23824, 0.23924, 0.24024, 0.24124, 0.24224, 0.24324, 0.24424, 0.24525, 0.24625, 0.24725, 0.24825, 0.24925, 0.25025, 0.25125, 0.25225, 0.25325, 0.25425, 0.25526, 0.25626, 0.25726, 0.25826, 0.25926, 0.26026, 0.26126, 0.26226, 0.26326, 0.26426, 0.26527, 0.26627, 0.26727, 0.26827, 0.26927, 0.27027, 0.27127, 0.27227, 0.27327, 0.27427, 0.27528, 0.27628, 0.27728, 0.27828, 0.27928, 0.28028, 0.28128, 0.28228, 0.28328, 0.28428, 0.28529, 0.28629, 0.28729, 0.28829, 0.28929, 0.29029, 0.29129, 0.29229, 0.29329, 0.29429, 0.2953, 0.2963, 0.2973, 0.2983, 0.2993, 0.3003, 0.3013, 0.3023, 0.3033, 0.3043, 0.30531, 0.30631, 0.30731, 0.30831, 0.30931, 0.31031, 0.31131, 0.31231, 0.31331, 0.31431, 0.31532, 0.31632, 0.31732, 0.31832, 0.31932, 0.32032, 0.32132, 0.32232, 0.32332, 0.32432, 0.32533, 0.32633, 0.32733, 0.32833, 0.32933, 0.33033, 0.33133, 0.33233, 0.33333, 0.33433, 0.33534, 0.33634, 0.33734, 0.33834, 0.33934, 0.34034, 0.34134, 0.34234, 0.34334, 0.34434, 0.34535, 0.34635, 0.34735, 0.34835, 0.34935, 0.35035, 0.35135, 0.35235, 0.35335, 0.35435, 0.35536, 0.35636, 0.35736, 0.35836, 0.35936, 0.36036, 0.36136, 0.36236, 0.36336, 0.36436, 0.36537, 0.36637, 0.36737, 0.36837, 0.36937, 0.37037, 0.37137, 0.37237, 0.37337, 0.37437, 0.37538, 0.37638, 0.37738, 0.37838, 0.37938, 0.38038, 0.38138, 0.38238, 0.38338, 0.38438, 0.38539, 0.38639, 0.38739, 0.38839, 0.38939, 0.39039, 0.39139, 0.39239, 0.39339, 0.39439, 0.3954, 0.3964, 0.3974, 0.3984, 0.3994, 0.4004, 0.4014, 0.4024, 0.4034, 0.4044, 0.40541, 0.40641, 0.40741, 0.40841, 0.40941, 0.41041, 0.41141, 0.41241, 0.41341, 0.41441, 0.41542, 0.41642, 0.41742, 0.41842, 0.41942, 0.42042, 0.42142, 0.42242, 0.42342, 0.42442, 0.42543, 0.42643, 0.42743, 0.42843, 0.42943, 0.43043, 0.43143, 0.43243, 0.43343, 0.43443, 0.43544, 0.43644, 0.43744, 0.43844, 0.43944, 0.44044, 0.44144, 0.44244, 0.44344, 0.44444, 0.44545, 0.44645, 0.44745, 0.44845, 0.44945, 0.45045, 0.45145, 0.45245, 0.45345, 0.45445, 0.45546, 0.45646, 0.45746, 0.45846, 0.45946, 0.46046, 0.46146, 0.46246, 0.46346, 0.46446, 0.46547, 0.46647, 0.46747, 0.46847, 0.46947, 0.47047, 0.47147, 0.47247, 0.47347, 0.47447, 0.47548, 0.47648, 0.47748, 0.47848, 0.47948, 0.48048, 0.48148, 0.48248, 0.48348, 0.48448, 0.48549, 0.48649, 0.48749, 0.48849, 0.48949, 0.49049, 0.49149, 0.49249, 0.49349, 0.49449, 0.4955, 0.4965, 0.4975, 0.4985, 0.4995, 0.5005, 0.5015, 0.5025, 0.5035, 0.5045, 0.50551, 0.50651, 0.50751, 0.50851, 0.50951, 0.51051, 0.51151, 0.51251, 0.51351, 0.51451, 0.51552, 0.51652, 0.51752, 0.51852, 0.51952, 0.52052, 0.52152, 0.52252, 0.52352, 0.52452, 0.52553, 0.52653, 0.52753, 0.52853, 0.52953, 0.53053, 0.53153, 0.53253, 0.53353, 0.53453, 0.53554, 0.53654, 0.53754, 0.53854, 0.53954, 0.54054, 0.54154, 0.54254, 0.54354, 0.54454, 0.54555, 0.54655, 0.54755, 0.54855, 0.54955, 0.55055, 0.55155, 0.55255, 0.55355, 0.55455, 0.55556, 0.55656, 0.55756, 0.55856, 0.55956, 0.56056, 0.56156, 0.56256, 0.56356, 0.56456, 0.56557, 0.56657, 0.56757, 0.56857, 0.56957, 0.57057, 0.57157, 0.57257, 0.57357, 0.57457, 0.57558, 0.57658, 0.57758, 0.57858, 0.57958, 0.58058, 0.58158, 0.58258, 0.58358, 0.58458, 0.58559, 0.58659, 0.58759, 0.58859, 0.58959, 0.59059, 0.59159, 0.59259, 0.59359, 0.59459, 0.5956, 0.5966, 0.5976, 0.5986, 0.5996, 0.6006, 0.6016, 0.6026, 0.6036, 0.6046, 0.60561, 0.60661, 0.60761, 0.60861, 0.60961, 0.61061, 0.61161, 0.61261, 0.61361, 0.61461, 0.61562, 0.61662, 0.61762, 0.61862, 0.61962, 0.62062, 0.62162, 0.62262, 0.62362, 0.62462, 0.62563, 0.62663, 0.62763, 0.62863, 0.62963, 0.63063, 0.63163, 0.63263, 0.63363, 0.63463, 0.63564, 0.63664, 0.63764, 0.63864, 0.63964, 0.64064, 0.64164, 0.64264, 0.64364, 0.64464, 0.64565, 0.64665, 0.64765, 0.64865, 0.64965, 0.65065, 0.65165, 0.65265, 0.65365, 0.65465, 0.65566, 0.65666, 0.65766, 0.65866, 0.65966, 0.66066, 0.66166, 0.66266, 0.66366, 0.66466, 0.66567, 0.66667, 0.66767, 0.66867, 0.66967, 0.67067, 0.67167, 0.67267, 0.67367, 0.67467, 0.67568, 0.67668, 0.67768, 0.67868, 0.67968, 0.68068, 0.68168, 0.68268, 0.68368, 0.68468, 0.68569, 0.68669, 0.68769, 0.68869, 0.68969, 0.69069, 0.69169, 0.69269, 0.69369, 0.69469, 0.6957, 0.6967, 0.6977, 0.6987, 0.6997, 0.7007, 0.7017, 0.7027, 0.7037, 0.7047, 0.70571, 0.70671, 0.70771, 0.70871, 0.70971, 0.71071, 0.71171, 0.71271, 0.71371, 0.71471, 0.71572, 0.71672, 0.71772, 0.71872, 0.71972, 0.72072, 0.72172, 0.72272, 0.72372, 0.72472, 0.72573, 0.72673, 0.72773, 0.72873, 0.72973, 0.73073, 0.73173, 0.73273, 0.73373, 0.73473, 0.73574, 0.73674, 0.73774, 0.73874, 0.73974, 0.74074, 0.74174, 0.74274, 0.74374, 0.74474, 0.74575, 0.74675, 0.74775, 0.74875, 0.74975, 0.75075, 0.75175, 0.75275, 0.75375, 0.75475, 0.75576, 0.75676, 0.75776, 0.75876, 0.75976, 0.76076, 0.76176, 0.76276, 0.76376, 0.76476, 0.76577, 0.76677, 0.76777, 0.76877, 0.76977, 0.77077, 0.77177, 0.77277, 0.77377, 0.77477, 0.77578, 0.77678, 0.77778, 0.77878, 0.77978, 0.78078, 0.78178, 0.78278, 0.78378, 0.78478, 0.78579, 0.78679, 0.78779, 0.78879, 0.78979, 0.79079, 0.79179, 0.79279, 0.79379, 0.79479, 0.7958, 0.7968, 0.7978, 0.7988, 0.7998, 0.8008, 0.8018, 0.8028, 0.8038, 0.8048, 0.80581, 0.80681, 0.80781, 0.80881, 0.80981, 0.81081, 0.81181, 0.81281, 0.81381, 0.81481, 0.81582, 0.81682, 0.81782, 0.81882, 0.81982, 0.82082, 0.82182, 0.82282, 0.82382, 0.82482, 0.82583, 0.82683, 0.82783, 0.82883, 0.82983, 0.83083, 0.83183, 0.83283, 0.83383, 0.83483, 0.83584, 0.83684, 0.83784, 0.83884, 0.83984, 0.84084, 0.84184, 0.84284, 0.84384, 0.84484, 0.84585, 0.84685, 0.84785, 0.84885, 0.84985, 0.85085, 0.85185, 0.85285, 0.85385, 0.85485, 0.85586, 0.85686, 0.85786, 0.85886, 0.85986, 0.86086, 0.86186, 0.86286, 0.86386, 0.86486, 0.86587, 0.86687, 0.86787, 0.86887, 0.86987, 0.87087, 0.87187, 0.87287, 0.87387, 0.87487, 0.87588, 0.87688, 0.87788, 0.87888, 0.87988, 0.88088, 0.88188, 0.88288, 0.88388, 0.88488, 0.88589, 0.88689, 0.88789, 0.88889, 0.88989, 0.89089, 0.89189, 0.89289, 0.89389, 0.89489, 0.8959, 0.8969, 0.8979, 0.8989, 0.8999, 0.9009, 0.9019, 0.9029, 0.9039, 0.9049, 0.90591, 0.90691, 0.90791, 0.90891, 0.90991, 0.91091, 0.91191, 0.91291, 0.91391, 0.91491, 0.91592, 0.91692, 0.91792, 0.91892, 0.91992, 0.92092, 0.92192, 0.92292, 0.92392, 0.92492, 0.92593, 0.92693, 0.92793, 0.92893, 0.92993, 0.93093, 0.93193, 0.93293, 0.93393, 0.93493, 0.93594, 0.93694, 0.93794, 0.93894, 0.93994, 0.94094, 0.94194, 0.94294, 0.94394, 0.94494, 0.94595, 0.94695, 0.94795, 0.94895, 0.94995, 0.95095, 0.95195, 0.95295, 0.95395, 0.95495, 0.95596, 0.95696, 0.95796, 0.95896, 0.95996, 0.96096, 0.96196, 0.96296, 0.96396, 0.96496, 0.96597, 0.96697, 0.96797, 0.96897, 0.96997, 0.97097, 0.97197, 0.97297, 0.97397, 0.97497, 0.97598, 0.97698, 0.97798, 0.97898, 0.97998, 0.98098, 0.98198, 0.98298, 0.98398, 0.98498, 0.98599, 0.98699, 0.98799, 0.98899, 0.98999, 0.99099, 0.99199, 0.99299, 0.99399, 0.99499, 0.996, 0.997, 0.998, 0.999, 1]), array([[ 0.88889, 0.88889, 0.88889, ..., 0, 0, 0], [ 1, 1, 1, ..., 0, 0, 0], [ 1, 1, 1, ..., 0, 0, 0], [ 1, 1, 1, ..., 0, 0, 0], [ 1, 1, 1, ..., 0, 0, 0], [ 1, 1, 1, ..., 0, 0, 0]]), 'Confidence', 'Recall']] fitness: 0.6812084136846558 keys: ['metrics/precision(B)', 'metrics/recall(B)', 'metrics/mAP50(B)', 'metrics/mAP50-95(B)'] maps: array([ 0.60261, 0.48529, 0.71323, 0.91293, 0.47746, 0.78356, 0.66251]) names: {0: 'Cucumber', 1: 'Snail', 2: 'Snail Food', 3: 'Water Bowl', 4: 'Hydrometer', 5: 'Lettuce', 6: 'Tunnel'} plot: True results_dict: {'metrics/precision(B)': 0.8797209763233896, 'metrics/recall(B)': 0.5019556244463792, 'metrics/mAP50(B)': 0.8494860101010101, 'metrics/mAP50-95(B)': 0.6625109029717274, 'fitness': 0.6812084136846558} save_dir: PosixPath('/opt/homebrew/runs/detect/snail-detection32') speed: {'preprocess': 0.33724308013916016, 'inference': 48.05099964141846, 'loss': 0.0, 'postprocess': 2.0505189895629883} task: 'detect'
In [ ]:
import imageio
import cv2
from ultralytics import YOLO
import matplotlib.pyplot as plt
# Step 1: Extract frames from the GIF
gif_path = 'snail_tracking_full_fast.gif'
frames = imageio.mimread(gif_path)
# Load the YOLO model
model = YOLO('/opt/homebrew/runs/detect/snail-detection3/weights/best.pt') # Replace with the path to your trained YOLO model
# Step 2: Run object detection on each frame
detected_frames = []
for i, frame in enumerate(frames):
# Convert the frame to OpenCV format (BGR)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# Perform object detection
results = model.predict(source=frame, show=False) # Disable auto display
# Annotate the frame with detected objects
annotated_frame = results[0].plot()
# Convert back to RGB for imageio
annotated_frame_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
detected_frames.append(annotated_frame_rgb)
print(f"Processed frame {i+1}/{len(frames)}")
# Step 3: Save the annotated frames as a new GIF
output_gif_path = 'snail_detection_output.gif'
imageio.mimsave(output_gif_path, detected_frames, duration=1)
print(f"Saved output GIF to {output_gif_path}")
# Step 4: Display one of the detected frames
plt.imshow(detected_frames[0])
plt.axis('off')
plt.show()
0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 51.7ms Speed: 3.4ms preprocess, 51.7ms inference, 0.8ms postprocess per image at shape (1, 3, 384, 640) Processed frame 1/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 96.8ms Speed: 1.9ms preprocess, 96.8ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 2/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 44.7ms Speed: 1.8ms preprocess, 44.7ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 3/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 40.3ms Speed: 2.4ms preprocess, 40.3ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 4/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 43.8ms Speed: 1.7ms preprocess, 43.8ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 5/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 39.5ms Speed: 1.3ms preprocess, 39.5ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 6/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 38.3ms Speed: 1.5ms preprocess, 38.3ms inference, 0.9ms postprocess per image at shape (1, 3, 384, 640) Processed frame 7/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 33.0ms Speed: 1.4ms preprocess, 33.0ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 8/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 32.2ms Speed: 1.2ms preprocess, 32.2ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 9/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 47.5ms Speed: 2.1ms preprocess, 47.5ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 10/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 42.7ms Speed: 1.6ms preprocess, 42.7ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 11/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 65.8ms Speed: 1.4ms preprocess, 65.8ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 12/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 33.4ms Speed: 1.2ms preprocess, 33.4ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 13/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 59.1ms Speed: 1.8ms preprocess, 59.1ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 14/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 59.8ms Speed: 1.2ms preprocess, 59.8ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 15/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 50.5ms Speed: 2.3ms preprocess, 50.5ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 16/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 39.1ms Speed: 2.1ms preprocess, 39.1ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 17/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 38.6ms Speed: 1.2ms preprocess, 38.6ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 18/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 34.0ms Speed: 1.3ms preprocess, 34.0ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 19/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 62.0ms Speed: 1.8ms preprocess, 62.0ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 20/20 Saved output GIF to snail_detection_output.gif
In [ ]:
import imageio
import cv2
from ultralytics import YOLO
import matplotlib.pyplot as plt
# Step 1: Extract frames from the GIF
gif_path = 'snail_tracking_full_fast.gif'
frames = imageio.mimread(gif_path)
# Load the YOLO model
model = YOLO('/opt/homebrew/runs/detect/snail-detection3/weights/best.pt') # Replace with the path to your trained YOLO model
# Step 2: Run object detection on each frame
detected_frames = []
for i, frame in enumerate(frames):
# Convert the frame to OpenCV format (BGR)
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
# Perform object detection
results = model.predict(frame, show=False) # Disable auto display
# Annotate the frame with detected objects
annotated_frame = results[0].plot()
# Convert back to RGB for imageio
annotated_frame_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
detected_frames.append(annotated_frame_rgb)
print(f"Processed frame {i+1}/{len(frames)}")
# Step 3: Save the annotated frames as a new GIF
output_gif_path = 'snail_detection_output.gif'
imageio.mimsave(output_gif_path, detected_frames, duration=1)
print(f"Saved output GIF to {output_gif_path}")
# Step 4: Display one of the detected frames
plt.imshow(detected_frames[0])
plt.axis('off')
plt.show()
0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 94.7ms Speed: 2.6ms preprocess, 94.7ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 1/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 44.3ms Speed: 2.4ms preprocess, 44.3ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 2/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 49.4ms Speed: 2.0ms preprocess, 49.4ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 3/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 41.7ms Speed: 1.5ms preprocess, 41.7ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 4/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 46.1ms Speed: 2.3ms preprocess, 46.1ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 5/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 46.8ms Speed: 1.9ms preprocess, 46.8ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 6/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 41.5ms Speed: 1.3ms preprocess, 41.5ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 7/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 45.0ms Speed: 2.2ms preprocess, 45.0ms inference, 2.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 8/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 59.3ms Speed: 8.5ms preprocess, 59.3ms inference, 2.0ms postprocess per image at shape (1, 3, 384, 640) Processed frame 9/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 41.6ms Speed: 1.3ms preprocess, 41.6ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 10/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 38.1ms Speed: 1.3ms preprocess, 38.1ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 11/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 34.5ms Speed: 1.9ms preprocess, 34.5ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 12/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 42.4ms Speed: 1.3ms preprocess, 42.4ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 13/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 47.4ms Speed: 1.4ms preprocess, 47.4ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 14/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 51.0ms Speed: 2.0ms preprocess, 51.0ms inference, 0.9ms postprocess per image at shape (1, 3, 384, 640) Processed frame 15/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 50.4ms Speed: 1.5ms preprocess, 50.4ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 16/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 48.4ms Speed: 1.8ms preprocess, 48.4ms inference, 0.3ms postprocess per image at shape (1, 3, 384, 640) Processed frame 17/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 41.4ms Speed: 1.4ms preprocess, 41.4ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 18/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 54.0ms Speed: 1.5ms preprocess, 54.0ms inference, 0.4ms postprocess per image at shape (1, 3, 384, 640) Processed frame 19/20 0: 384x640 1 Cucumber, 1 Water Bowl, 1 Lettuce, 50.0ms Speed: 1.4ms preprocess, 50.0ms inference, 0.5ms postprocess per image at shape (1, 3, 384, 640) Processed frame 20/20 Saved output GIF to snail_detection_output.gif
In [ ]: